# locust777



////内置函数strlen统计字符串长度
//#include<string.h>
//#include<stdio.h>
//#include<windows.h>
//
//int main()
//{
//	int len =  strlen("abcdef");
//	printf("%d\n",len);  //6
//
//
//system("pause");
//return 0;
//}


//#include<string.h>
//#include<stdio.h>
//#include<windows.h>


////自己设计一个统计长度函数
//int my_strlen(char* str)
//{
//	int count = 0;
//	while(*str != '\0')
//	{
//	count++;
//	str++;
//	}
//	return count;
//}
//
//
//
//int main()
//{
//	//int len1 =  strlen("abcdef"); //自带的可以将长度赋值给变量，利用变量输出
//	//printf("%d\n",len1);  //6
//	int len = my_strlen("abcdef");  //可以
//	printf("%d\n", len);//6
//	printf("%d\n",my_strlen("abcdef"));  //链式访问
//
//system("pause");
//return 0;
//}


////自己设计一个统计长度函数
////利用指针减去指针的方法
//
//#include<string.h>
//#include<stdio.h>
//#include<windows.h>
//
//int my_strlen(char* str)  //获取，str的地址
//{
//	char* start = str; //将str的值赋值给start
//	while(*str != '\0') //地址从前到后不为 '\0'
//	{
//	str++;  //str++
//	}
//	return (str - start);  //指针减去指针，计算的是指针的中间长度
//}   
// //       a b c d e f
// //start           str
//
//
//
//int main()
//{
//	int len = my_strlen("abcdef");
//	printf("%d\n", len);
//
//system("pause");
//return 0;
//}

//
////指针+指针 ?    //日期
//                 //日期+天数
////地址+地址 ?    //日期—天数
//                 //日期—日期
////305+306 ?      //日期+日期？  //err
//
//
//
//
////代码的标准化
////指针+-整数
//#define N_VALUES 5
//float values[N_VALUES];
//float *vp;
//
//for(vp = &values[N_VALUES];vp > &values[0];)
//{
//	*--vp = 0;  //在vp > &values[0]全部变为零
//	0 0 0 0 0 
//	0 1 2 3 4 5
//}
//
////  实际在绝大多数的编译器上是可以顺利完成任务的，然而我们还是要避免这样写，因为标准并不保证它可行。
//
////标准规定
////
////允许指向 数组元素的指针 与 指向数组最后一个元素后面的那个内存位置的指针比较，但是不允许与指向第一个元素之前的那个内存位置的指针进行比较


// 0 0 0 0 0 0 0 0  | 0 0 0 0 0 0 0 | 0 0 0 0 0 0
//               p3 |  p1              p2
//                  |err  
//


//
////数组：一组相同类型元素的合计
////指针变量：是一个变量，存放的是地址
////
//#include<stdio.h>
//#include<windows.h>
//
//
//int main()
//{
//	int arr[10] = {0};
//	//arr是首元素的地址
//	//&arr[0] 等于
//	int* p = arr;
//	//通过指针来访问数组
//	int sz = sizeof(arr)/sizeof(arr[0]);
//	int i = 0;
//	//for(i = 0;i < sz; i++)
//	//{
//	//printf("%d ",*(p + i));  //p+i 取下一个值的地址
//	//}
//	for(i = 0;i < sz; i++)
//	{
//	printf("%p -------- %p\n",&arr[i],p + i);  //地址都相同
//	printf("%p -------- %p\n",&arr[i],*(p + i));// 与上述不同，不能如此访问 00000000
//	printf("%p -------- %p\n",&arr[i],*(arr + i)); //与上述不同，00000000
//	}
//
//	printf("\n");
//system("pause");
//return 0;
//}


//#include<stdio.h>
//#include<windows.h>

////*p 方法
//void test(int* p,int sz)
//{
//	int i = 0;
//	for(i = 0;i < sz;i++)
//	{
//	    printf("%d ",*(p + i)); //存在报错，后期处理
//	}
//
//}

////arr 方法
//void test(int arr[],int sz)   //外部被引用
//{
//	int i = 0;
//	for(i = 0;i < sz;i++)
//	{
//	    printf("%d ",arr[i]); //arr[i] --> *(arr+1)
//	}
//
//}
//
//
//int mian()
//{
//	int arr[10] = {0};
//	test(arr,10);
//
//system("pause");
//return 0;
//}


////1.指针是什么?
//
////1.指针是内存中一个最小单元的编号，也就是地址
////2.平时口语中所说的指针，通常指的是指针变量，是用来存放内存地址的变量
//
////总结：指针就是地址，口语中说的指针通常指的是指针变量


//野指针
//概念：野指针就是指向的位置是不可知的（随机的，不正确的，没有明确限制的）
//

//野指针成因
//1。指针未初始化



// 指针运算



//指针+-整数



////1.二级指针
//#include<stdio.h>
//#include<windows.h>
//int main()
//{
//	int a = 10;
//	int* pa = &a; //pa是一个指针变量，一级指针变量
//	
//	/*
//	*pa = 20;
//	printf("%d\n",a);//20
//	*/
//	int** ppa = &pa; //ppa是一个二级指针变量
//	**ppa = 20;
//	printf("%d\n",a);//20                       
//
//system("pause");
//return 0;
//}
//
////0x0012ff40   -->a   4
////
////int* *p  ------------>第一个* 说明指向的对象是int* 类型 
////                      第二个* 说明ppa是指针
////0x0018ff32   --
////0x0012ff40   -->pa  4
////
////0x0018ff32   -->ppa  4


////
////指针数组
////存放指针的数组就是指针数组
////
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int c = 30;
//
//	int arr[10];
//
//	int* pa = &a;
//	int* pb = &b;
//	int* pc = &c;
//	
//	//parr就是存放指针的数组
//	//指针数组
//	int* parr[10] = {&a,&b,&c};
//
//return 0;
//}
